#pragma once    

#include <string>
#include <stdint.h>

struct Options
{
    uint16_t port;
    int length;
    int number;
    bool transmit, receive, nodelay;
    std::string host;
    Options()
        : port(0), length(0), number(0),
          transmit(false), receive(false), nodelay(false)
    {}
};

// 解析命令行参数
bool parseCommandLine(int argc, char* argv[], Options* opt);

struct sockaddr_in resolveOrDie(const char* host, uint16_t port);


// 会话消息结构
struct SessionMessage
{
    int32_t number;
    int32_t length;
} __attribute__ ((__packed__)); // 取消字节对齐

struct PayloadMessage
{
    int32_t length;
    char data[0];       // 可变长数组, 根据动态分配的大小变化
};

void transmit(const Options& opt);

void receive(const Options& opt);
